#include <bits/stdc++.h>
using namespace std;

int main(){
  int m,n;
  while(true){
    cin>>m>>n;
    if(m<=0||n<=0) break;
    for(int i=min(m,n);i>=1;i--){
      if(m%i==0&&n%i==0) {
        cout<<i<<endl;
        break;
      }
    }
  }

  return 0;
}


//题目：最大公约数
//
//描述：
//题目描述
//给定两个正整数m和n，计算m和n的最大公约数。
//
//输入格式
//多行，每行两个正整数m,n。当输入0和负数时，输入结束。
//
//输出格式
//多行，每行一个整数，表示输入m和n的最大公约数。
//
//输入样例
//6 9
//0 0
//输出样例
//3

// #include <iostream>
//
// // 计算最大公约数的函数，使用欧几里得算法
// int gcd(int a, int b) {
//   while (b != 0) {
//     int temp = b;
//     b = a % b;
//     a = temp;
//   }
//   return a;
// }
//
// int main() {
//   int num1 = 48;
//   int num2 = 18;
//   int result = gcd(num1, num2);
//   std::cout << "The GCD of " << num1 << " and " << num2 << " is: " << result << std::endl;
//   return 0;
// }

// 例子：计算 gcd(48, 18)
// 初始状态
// 我们要计算 48 和 18 的最大公约数，所以初始时 a = 48，b = 18。
// 第一次循环
// int temp = b;：将 b 的值（即 18）赋给临时变量 temp，此时 temp = 18。
// b = a % b;：计算 a % b，也就是 48 % 18。在数学中，48 ÷ 18 = 2 余 12，所以 48 % 18 = 12，将结果赋给 b，此时 b = 12。
// a = temp;：把 temp 的值（即 18）赋给 a，此时 a = 18。
// 第二次循环
// int temp = b;：将 b 的值（即 12）赋给临时变量 temp，此时 temp = 12。
// b = a % b;：计算 a % b，也就是 18 % 12。因为 18 ÷ 12 = 1 余 6，所以 18 % 12 = 6，将结果赋给 b，此时 b = 6。
// a = temp;：把 temp 的值（即 12）赋给 a，此时 a = 12。
// 第三次循环
// int temp = b;：将 b 的值（即 6）赋给临时变量 temp，此时 temp = 6。
// b = a % b;：计算 a % b，也就是 12 % 6。由于 12 ÷ 6 = 2 余 0，所以 12 % 6 = 0，将结果赋给 b，此时 b = 0。
// a = temp;：把 temp 的值（即 6）赋给 a，此时 a = 6。
// 循环结束
// 此时 b = 0，不满足 while (b != 0) 的条件，循环结束。
// 最后函数返回 a 的值，也就是 6。所以 48 和 18 的最大公约数是 6。